﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Joel.Vishnu.Presentacion;
using Joel.Vishnu.Presentacion.Vistas;
using Joel.Vishnu.Modelo.Enumeradores;
using Joel.Vishnu.Modelo.Entidades;

namespace Joel.Vishnu.SitioWeb
{
    public partial class ProductoSubCategorias : System.Web.UI.Page, IProductoSubCategorias
    {
        #region Atributos

        private ProductoSubCategoriasPresentador presentador;

        #endregion

        #region Propiedades

        public Int32 ProductoSubCategoriaId
        {
            get { return Convert.ToInt32(lblProductoSubCategoriaId.Text); }
        }

        public String Nombre
        {
            get { return txtNombre.Text; }
        }

        public Int32 ProductoCategoriaId
        {
            get { return Convert.ToInt32(ddProductoCategorias.SelectedValue); }
        }

        public EnumEstado Estado
        {
            get
            {
                switch (lblEstado.Text)
                {
                    case "0":
                        return EnumEstado.NUEVO;
                    case "1":
                        return EnumEstado.MODIFICAR;
                    default:
                        return EnumEstado.ELIMINAR;
                }
            }
        }

        public List<ProductoSubCategoria> ListaProductoSubCategorias
        {
            set
            {
                grdProductosSubCategorias.DataSource = value;
                grdProductosSubCategorias.DataBind();
            }
        }

        public List<ProductoCategoria> ListaProductoCategorias
        {
            set
            {
                ddProductoCategorias.DataSource = value;
                ddProductoCategorias.DataValueField = "Id";
                ddProductoCategorias.DataTextField = "Nombre";
                ddProductoCategorias.DataBind();
            }
        }

        #endregion

        #region Metodos

        private void HabilitarControles()
        {
            txtNombre.Enabled = !txtNombre.Enabled;
            ddProductoCategorias.Enabled = !ddProductoCategorias.Enabled;

            btnInsertar.Enabled = !btnInsertar.Enabled;
            btnModificar.Enabled = !btnModificar.Enabled;
            btnEliminar.Enabled = !btnEliminar.Enabled;
            btnAceptar.Enabled = !btnAceptar.Enabled;
            btnCancelar.Enabled = !btnCancelar.Enabled;

            grdProductosSubCategorias.Enabled = !grdProductosSubCategorias.Enabled;
        }

        private void LimpiarCampos()
        {
            lblProductoSubCategoriaId.Text = String.Empty;
            txtNombre.Text = String.Empty;
            ddProductoCategorias.SelectedIndex = 1;
            grdProductosSubCategorias.SelectedIndex = -1;
        }

        private void ActualizarDatos()
        {
            try
            {
                txtNombre.Text = grdProductosSubCategorias.SelectedRow.Cells[1].Text;
                lblProductoSubCategoriaId.Text = grdProductosSubCategorias.SelectedRow.Cells[3].Text;
                lblProductoCategoriaId.Text = grdProductosSubCategorias.SelectedRow.Cells[4].Text;
                ddProductoCategorias.SelectedValue = presentador.TraerProductoCategoriaPorId(Convert.ToInt32(lblProductoCategoriaId.Text)).Id.ToString();
            }
            catch (Exception ex)
            {
                lblErrores.Text = ex.Message;
            }
        }

        #endregion

        #region Eventos

        protected void Page_Load(Object sender, EventArgs e)
        {
            try
            {
                presentador = new ProductoSubCategoriasPresentador(this);
                if (!Page.IsPostBack)
                    presentador.Inicializar();
                lblErrores.Text = String.Empty;
            }
            catch (Exception ex)
            {
                lblErrores.Text = ex.Message;
            }
        }

        protected void grdProductosSubCategorias_SelectedIndexChanged(Object sender, EventArgs e)
        {
            if (grdProductosSubCategorias.SelectedIndex != -1)
            {
                ActualizarDatos();
            }
            else
                LimpiarCampos();
        }

        protected void btnInsertar_Click(Object sender, EventArgs e)
        {
            lblEstado.Text = Convert.ToString((Int32)EnumEstadoId.NUEVO_ID);
            HabilitarControles();
            LimpiarCampos();
            txtNombre.Focus();
        }

        protected void btnModificar_Click(Object sender, EventArgs e)
        {
            if (grdProductosSubCategorias.SelectedRow != null)
            {
                if (lblProductoSubCategoriaId.Text != Convert.ToString((Int32)EnumProductoSubCategorias.PRODUCTOSUBCATEGORIA_POR_DEFECTO))
                {
                    lblEstado.Text = Convert.ToString((Int32)EnumEstadoId.MODIFICAR_ID);
                    HabilitarControles();
                    txtNombre.Focus();
                }
                else
                    lblErrores.Text = "No puede modificar una sub categoría por defecto.";
            }
            else
                lblErrores.Text = "Debe seleccionar una sub categoría.";
        }

        protected void btnEliminar_Click(Object sender, EventArgs e)
        {
            if (grdProductosSubCategorias.SelectedRow != null)
            {
                if (lblProductoSubCategoriaId.Text != Convert.ToString((Int32)EnumProductoSubCategorias.PRODUCTOSUBCATEGORIA_POR_DEFECTO))
                {
                    try
                    {
                        lblEstado.Text = Convert.ToString((Int32)EnumEstadoId.ELIMINAR_ID);
                        presentador.Eliminar();
                        LimpiarCampos();
                    }
                    catch (Exception ex)
                    {
                        lblErrores.Text = ex.Message;
                    }
                }
                else
                    lblErrores.Text = "No puede eliminar una sub categoría por defecto.";
            }
            else
                lblErrores.Text = "Debe seleccionar una sub categoría.";
        }

        protected void btnAceptar_Click(Object sender, EventArgs e)
        {
            try
            {
                presentador.Aceptar();
                HabilitarControles();
                switch (lblEstado.Text)
                {
                    case "0":
                        lblErrores.Text = "Sub categoría ingresada.";
                        break;
                    case "1":
                        lblErrores.Text = "Sub categoría modificada.";
                        break;
                }
                LimpiarCampos();
            }
            catch (Exception ex)
            {
                lblErrores.Text = ex.Message;
            }
        }

        protected void btnCancelar_Click(Object sender, EventArgs e)
        {
            HabilitarControles();
            LimpiarCampos();
        }

        #endregion
    }
}